package com.qf.fmall.utils;

import cn.hutool.jwt.JWT;
import com.qf.fmall.user.entity.User;

import java.util.Date;

public class TokenUtils {
    public static final String SECRETKEY = "qfsyqd2304";
    public static void main(String[] args) throws InterruptedException {
        User user = new User();
        user.setUsername("lisi");
        user.setUserId(1);
        String toke = TokenUtils.createToke(user);
        System.out.println(toke);
//        String s = "1244554"+toke+ "sdasfaf";
//        Boolean flag = TokenUtils.checkToken(toke);
//        Boolean flag1 = TokenUtils.checkToken(s);
        Thread.sleep(3000);//休眠3秒
        Boolean flag2 = TokenUtils.checkToken(toke);
//        System.out.println(flag);
//        System.out.println(flag1);
        System.out.println(flag2);
    }

    public static String createToke(User user){
        //创建jwt对象
        JWT jwt = JWT.create();
        //token一天后过期
        Date expriDate = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 );
        String jwtToken = jwt.setSubject(user.getUsername())//这个token是颁发给用户使用的
                .setKey(SECRETKEY.getBytes()).setPayload("userid",user.getUserId())//设置自定义的payload字段
                .setExpiresAt(expriDate)//设置token的过期时间
                .setKey(SECRETKEY.getBytes())//设置服务器私有密钥
                .sign();//生成token字符串
           return jwtToken;
    }

    /**
     * 检查token是否正确
     * @param token
     * @return
     */
    public static Boolean checkToken(String token){

//        boolean verify = jwt.verify();//检查token的签名是否有效
        boolean validate ;//即检查token的签名是否有效,也检查token是否过期
        //ctrl+alt+t 代码块
        try{
            //1.根据传入的字符串创建 token 对象
            JWT jwt = JWT.of(token);
            //2.设置服务器端私有密钥
            jwt.setKey(SECRETKEY.getBytes());
           validate = jwt.validate(0);
        }catch (Exception e){
            //捕获校验的token时可能发生异常，如果有异常，也说明token非法
//            e.printStackTrace();//打印异常
            validate = false;
        }
        return validate;
    }
}
